package com.example.d15_homework.homework04;

public class Test {
    public static void main(String[] args) {
        new B();
        /*
        总结：执行优先级 静态代码块 > 静态属性 > 父类的普通代码块 > 父类的构造方法 > 子类的普通代码块 > 子类的构造方法
        首先我们new B()的时候，因为B继承了A，所以会先去执行A的静态代码块 输出：Static-A执行了 1
        因为在B中 有一个静态属性static C c = new C(); 所以去执行C的构造方法 输出：构造方法-C执行了 2
        然后在执行自己静态代码块 输出：Static-B执行了 3
        然后去执行父类的普通代码块 输出：代码块-A执行了 4
        然后去执行父类的构造方法 输出：构造方法-A执行了 5
        然后执行自己的代码块 输出：代码块-B执行了 6
        然后执行自己的构造方法 输出：构造方法-B执行了 7
         */
    }
}

class A {
    static {
        System.out.println("Static-A执行了"); // 1
    }

    {
        System.out.println("代码块-A执行了"); // 4
    }

    public A() {
        System.out.println("构造方法-A执行了"); // 5
    }
}

class B extends A {
    static C c = new C();

    static {
        System.out.println("Static-B执行了"); // 3
    }

    {
        System.out.println("代码块-B执行了"); // 6
    }

    public B() {
        System.out.println("构造方法-B执行了"); // 7
    }
}

class C {
    public C() {
        System.out.println("构造方法-C执行了"); // 2
    }
}